
# ------------------------------------------------------------------------------------------
# # 包（Packages）
#
# Julia有超过2000个登记在案的包，这使包成为Julia生态中很大的一个部分。
#
# 尽管如此，包生态依然有成长的必要。值得一提的是，我们有最棒的调用其他语言的函数，提供了很棒的其他语言函数接口。我们可以很容易地通过`PyCall`或`Rcall`调用Python或
# R。
#
# 这意味着你不必等到Julia的生态完全成熟，而且迁移到Julia并不意味着放弃你在其他语言中惯用的包或者库！
#
# 查看全部可获得的包，请看
#
# https://pkg.julialang.org/
# 或者
# https://juliaobserver.com/
#
# 现在我们先学习一下该如何使用包。
# ------------------------------------------------------------------------------------------

# ------------------------------------------------------------------------------------------
# 在已有的Julia中第一次要使用一个包的时候，你需要用包管理器（package manager）明确添加（add）它：
# ------------------------------------------------------------------------------------------

using Pkg
Pkg.add("Example")

# ------------------------------------------------------------------------------------------
# 每次使用Julia（比如打开一个新的REPL回话或者第一次打开一个notebook），你需要通过`using`关键字载入要用的包
# ------------------------------------------------------------------------------------------

using Example

# ------------------------------------------------------------------------------------------
# 在`Example.jl`的源码
# https://github.com/JuliaLang/Example.jl/blob/master/src/Example.jl
# 中我们可以看到声明了下面这个函数
#
# ```
# hello(who::String) = "Hello, $who"
# ```
#
# 载入了`Example`我们现在应该可以调用`hello`函数了
# ------------------------------------------------------------------------------------------

hello("it's me. I was wondering if after all these years you'd like to meet.")

# ------------------------------------------------------------------------------------------
# 现在让我们来戏耍Colors包吧
# ------------------------------------------------------------------------------------------

Pkg.add("Colors")

using Colors

# ------------------------------------------------------------------------------------------
# 我们来创建一个100个不同颜色的调色板
# ------------------------------------------------------------------------------------------

palette = distinguishable_colors(100)

# ------------------------------------------------------------------------------------------
# 然后我们通过`rand`函数来创建随机矩阵
# ------------------------------------------------------------------------------------------

rand(palette, 3, 3)

# ------------------------------------------------------------------------------------------
# 在下一个notebook中，我们将使用一个新的包来绘制数据集。
# ------------------------------------------------------------------------------------------

# ------------------------------------------------------------------------------------------
# ### 练习
#
# #### 7.1
# 载入Primes包（源码在https://github.com/JuliaMath/Primes.jl ）
# ------------------------------------------------------------------------------------------

using Primes

@assert @isdefined Primes

# ------------------------------------------------------------------------------------------
# #### 7.2
# 确认你可以使用`primes`函数获得所有小于1,000,000的质数，并把它存入变量`primes_list`
# ------------------------------------------------------------------------------------------



@assert primes_list == primes(1000000)

# ------------------------------------------------------------------------------------------
# 完成练习后请点击顶部的`Validate`。
# ------------------------------------------------------------------------------------------
